package com.erqi.time;

import com.github.s7connector.api.DaveArea;
import com.github.s7connector.api.S7Connector;
import com.github.s7connector.api.S7Serializer;
import com.github.s7connector.api.factory.S7ConnectorFactory;
import com.github.s7connector.api.factory.S7SerializerFactory;
import com.github.s7connector.impl.serializer.converter.StringConverter;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;

import javax.swing.plaf.basic.BasicDesktopIconUI;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author king
 * @Date 2020/6/12 9:03
 * @Version 1.0
 */
@Slf4j
public class getplc {

    private static Object List ;

    public static void main(String[] args) throws IOException {
        S7Connector connector = S7ConnectorFactory
                .buildTCPConnector()
                .withHost("192.168.0.1") //plc 地址
                .withRack(0) //架机号
                .withSlot(1) //插槽号
                .build();

                byte[] PlcData = connector.read(DaveArea.DB, 2, 500,0);

        StringConverter stringConverter = new StringConverter();

        String StrPlc = null;
                StrPlc = new String(PlcData);









                System.out.println("StrPlc = " + StrPlc);




        connector.close();

    }


    @Test
   public void test1() throws IOException {
        S7Connector connector = S7ConnectorFactory
                .buildTCPConnector()
                .withHost("192.168.0.4") //plc 地址
                .withRack(0) //架机号
                .withSlot(1) //插槽号
                .build();
        String plc31 =new String(connector.read(DaveArea.DB, 18, 500,3000),StandardCharsets.UTF_8).trim();//31#一体机地址已经+2

        System.out.println("StrPlc = " + plc31);

       /* StringConverter stringConverter= new StringConverter();
        Plcs7PointVariable plcs7PointVariable = new Plcs7PointVariable();
       // int extract = PlcData[9];
        Object extract = stringConverter.extract(plcs7PointVariable.getFieldType(), PlcData, 0, 1);
        System.out.println("extract = " + extract);

        String StrPlc = null;
        StrPlc = new String(PlcData);
        System.out.println("StrPlc 11= " + StrPlc);

*/


        connector.close();

    }


    @Test
    public void   Test(){
        log.info("6656565");
    }


    /*public void GData(){   旧方法
        log.info("————   测试连接   ————");
        S7Connector connector =S7ConnectorFactory
                .buildTCPConnector()
                .withHost(plcResources.getIp()) //plc 地址
                .withRack(plcResources.getRack()) //架机号
                .withSlot(plcResources.getSlot()) //插槽号
                .build();
        log.info("————    测试OK    ————");
        log.info("———   开始读取数据   ———");
        byte[] PlcData = connector.read(DaveArea.DB, plcResources.getAreaNumber(), plcResources.getBytes(), plcResources.getOffset());
        try {
            String StrPlc = new String(PlcData, StandardCharsets.UTF_8).trim();
            log.info("读数据为:"+StrPlc);
            list.add(1,StrPlc);
            if (list.get(0)==null&&list.get(0).equals("")){
                list.add(0,"6");
                log.info("———   集合0为空以赋值   ———");
            }
            if (list.get(1)==null&&list.get(1).equals("")) {
                list.add(1,"StrPlc");
                log.info("———   集合1为空以赋值   ———");
            }
            if (list.get(0).equals(list.get(1))){
                log.info("—— 数据相同不进行操作   ——");
            }else{
                Qrandplc plCdata = new Qrandplc();
                log.info("—— 数据不同进行入库操作 ——");
                String plcD = (String) list.get(1);
                String code = plcD.substring(2); //截取单晶号
                String code_BT = plcD.substring(2,3);
                if (code_BT.equals("0")){
                    log.info("—— 检测到数据存在0 已经修复 ++   ——");
                    code="BT"+plcD.substring(4);
                }
                plcD=plcD.substring(0,2);   //截取设备号
                if (plcD.equals("17")||plcD.equals("18")||plcD.equals("19")){
                    plCdata.setDate(new Date());
                    plCdata.setType("开方机");
                    plCdata.setQrcode(code);
                    plCdata.setNumRobot("1");
                    plCdata.setNumMachine(plcD);
                    plCdata.setWorkshop("2");
                    plCdata.setUser(Message.ThreeKUser);
                    log.info("—— 当前用户为 ——"+Message.ThreeKUser);
                    //System.out.println(plCdata);
                    Qrandplc plCdatas = new Qrandplc();
                    plCdatas.setQrcode(code);
                    plCdatas.setType("开方机");
                    int i = qrMapper.selectByQrandplc(plCdatas);
                    if(i>0){
                        plCdata.setState1("重复");
                        log.info("————   数据重复   ————");
                        Message.msgList.add("————   数据重复   ————");
                    }else{
                        plCdata.setState1("入库成功");
                    }
                    System.out.println(plCdata);
                }
                if (plcD.equals("27")||plcD.equals("28")||plcD.equals("29")||plcD.equals("30")||plcD.equals("31")){
                    plCdata.setDate(new Date());
                    plCdata.setType("一体机");
                    plCdata.setNumRobot("1");
                    plCdata.setQrcode(code);
                    plCdata.setNumMachine(plcD);
                    plCdata.setWorkshop("2");
                    plCdata.setUser(Message.ThreeTUser);
                    log.info("—— 当前用户为 ——"+Message.ThreeTUser);
                    // System.out.println(plCdata);
                    Qrandplc plCdatas = new Qrandplc();
                    plCdatas.setQrcode(code);
                    plCdatas.setType("一体机");
                    int i = qrMapper.selectByQrandplc(plCdatas);
                    if(i>0){
                        plCdata.setState1("重复");
                        log.info("————   数据重复   ————");
                        Message.msgList.add("————   数据重复   ————");
                    }else{
                        plCdata.setState1("入库成功");
                    }
                    System.out.println(plCdata);
                }
                int i = qrMapper.insertSelective(plCdata);
                if (i!=1){
                    log.info("———   数据入库失败   ———");
                }
                log.info("———   数据入库成功   ———");
            }
            list.remove(0);
        } catch (StringIndexOutOfBoundsException e){
            log.error("下标越界 异常拦截");
            Message.msgList.add(" 下标越界 异常拦截 读取的长度不够 ");
        }finally {
            try {
                connector.close();
                log.info("————   关闭连接   ————");
            } catch (IOException e) {
                e.printStackTrace();
                log.info("————关闭连接发生异常————");
            }
        }
        log.info("————     END    —————");
        log.info("");
    }*/



    //@Scheduled(cron = "*/1 * * * * ?")
    /*public void GData330(){
        // 前端展示信息
        log.info("————   测试连接 330   ————");
        S7Connector connector =S7ConnectorFactory
                .buildTCPConnector()
                .withHost(plcResources.getIp()) //plc 地址
                .withRack(plcResources.getRack()) //架机号
                .withSlot(plcResources.getSlot()) //插槽号
                .build();
        log.info("————    测试OK 330   ————");
        log.info("———   开始读取数据  330  ———");
        byte[] PlcData = connector.read(DaveArea.DB, plcResources.getAreaNumber(),19, 332);
        String StrPlc = null;
        try {
            StrPlc = new String(PlcData,"UTF-8").trim();
            log.info("读数据为:"+StrPlc);
            list332.add(1,StrPlc);
            if (list332.get(0)==null&&list332.get(0).equals("")){
                list332.add(0,"6");
                log.info("———   集合0为空以赋值   ———");
            }
            if (list332.get(1)==null&&list332.get(1).equals("")) {
                list332.add(1,"StrPlc");
                log.info("———   集合1为空以赋值   ———");
            }
            if (list332.get(0).equals(list332.get(1))){
                log.info("—— 数据相同不进行操作   ——");
            }else{
                Qrandplc plCdata = new Qrandplc();
                log.info("—— 数据不同进行入库操作 ——");
                String plcD = (String) list332.get(1);
                String code = plcD.substring(2); //截取单晶号
                String code_BT = plcD.substring(2,3);
                if (code_BT.equals("0")){
                    log.info("—— 检测到数据存在0 已经修复 ++   ——");
                    code="BT"+plcD.substring(4);
                }
                plcD=plcD.substring(0,2);   //截取设备号
                if (plcD.equals("17")||plcD.equals("18")||plcD.equals("19")){
                    plCdata.setDate(new Date());
                    plCdata.setType("开方机");
                    plCdata.setQrcode(code);
                    plCdata.setNumRobot("1");
                    plCdata.setNumMachine(plcD);
                    plCdata.setWorkshop("2");
                    plCdata.setUser(Message.ThreeKUser);
                    log.info("—— 当前用户为 ——"+Message.ThreeKUser);
                    //System.out.println(plCdata);
                    Qrandplc plCdatas = new Qrandplc();
                    plCdatas.setQrcode(code);
                    plCdatas.setType("开方机");
                    int i = qrMapper.selectByQrandplc(plCdatas);
                    if(i>0){
                        plCdata.setState1("重复");
                        log.info("————   数据重复   ————");
                    }else{
                        plCdata.setState1("入库成功");
                    }
                    System.out.println(plCdata);
                }
                if (plcD.equals("27")||plcD.equals("28")||plcD.equals("29")||plcD.equals("30")||plcD.equals("31")){
                    plCdata.setDate(new Date());
                    plCdata.setType("一体机");
                    plCdata.setNumRobot("1");
                    plCdata.setQrcode(code);
                    plCdata.setNumMachine(plcD);
                    plCdata.setWorkshop("2");
                    plCdata.setUser(Message.ThreeTUser);
                    log.info("—— 当前用户为 ——"+Message.ThreeTUser);
                    // System.out.println(plCdata);
                    Qrandplc plCdatas = new Qrandplc();
                    plCdatas.setQrcode(code);
                    plCdatas.setType("一体机");
                    int i = qrMapper.selectByQrandplc(plCdatas);
                    if(i>0){
                        plCdata.setState1("重复");
                        log.info("————   数据重复   ————");
                    }else{
                        plCdata.setState1("入库成功");
                    }
                    System.out.println(plCdata);
                }
                int i = qrMapper.insertSelective(plCdata);
                if (i!=1){
                    log.info("———   数据入库失败   ———");
                }
                log.info("———   数据入库成功   ———");
            }
            list332.remove(0);
        } catch (IOException e) {
            e.printStackTrace();
            log.info("————   发生异常   ————");
        }catch (StringIndexOutOfBoundsException e){
            log.error("下标越界 异常拦截");
        }finally {
            try {
                connector.close();
                log.info("————   关闭连接   ————");
            } catch (IOException e) {
                e.printStackTrace();
                log.info("————关闭连接发生异常————");
            }
        }
        log.info("————     END 330    —————");
        log.info("");
    }*/
}
